﻿<!DOCTYPE html>
<html>
<head>
    <title>常见的排序算法的实现</title>
</head>
<body>
    <script type="text/javascript">
        /**
         * 插入排序
         * 排序思想，每次排序，都是将当前数据，与前面已经排序好的数据做比较，并进行排序，
         * 如果符合要求，就会交换数据，将当前数据移动到目标位置
         */
        function insertSort (array) {
            let len = array.length
            array.forEach((item, index) => {
                if (index === 0) return
                let loopNum = index - 1
                while (loopNum >= 0 && item < array[ loopNum ]) {
                    array[ loopNum + 1 ] = array[ loopNum ]
                    loopNum--
                }
                array[ loopNum + 1 ] = item
            })
            return array
        }
        console.log(insertSort([ 1, 6, 2, 3, 77, 22, 8, 4 ]))

        /**
         * 选择排序
         * 每次获取取最小的一位数，并与当前数据进行交换，知道末尾
         */
        function selectSort (array) {
            for (let index = 0; index < array.length; index++) {
                let positionIndex = index
                let val = array[ index ]
                for (let index2 = index + 1; index2 < array.length; index2++) {
                    if (val > array[ index2 ]) {
                        positionIndex = index2
                        val = array[ index2 ]
                    }
                }
                array[ positionIndex ] = array[ index ]
                array[ index ] = val
            }
            return array
        }
        console.log(selectSort([ 55, 2, 11, 56, 33, 1 ]))

        /**
         * 冒泡排序
         * 每次循环，都将最大的数排到最后去，排序好的就不动，直到全部排好
         */
        function bubbleSort (array) {
            for (let i = 0; i < array.length; i++) {
                for (let j = 0; j < array.length - i - 1; j++) {
                    if (array[ j ] > array[ j + 1 ]) {
                        let temp = array[ j ]
                        array[ j ] = array[ j + 1 ]
                        array[ j + 1 ] = temp
                    }
                }
            }
            return array
        }
        console.log(bubbleSort([33,2,1,55,35,77,11]))
    </script>
</body>
</html>